/**
********************************************************************************
@file     test_ut_verify_string_eq.c
@brief    对文件的简要说明
@details  对文件的详细说明
@author   jcai
@date     2024-09-10 22:16:18
@copyright Copyright &copy; 2024 wy1107412334@163.com All rights reserved
@version  v0.0.1

\n Email:  wy1107412334@163.com
\n Blog:   None
\n Github: https://github.com/wy1107412334
\n Gitee:  https://gitee.com/git.git1107412334.com

********************************************************************************
@note
None.
********************************************************************************
@attention
None.
********************************************************************************
@verbatim
@endverbatim
********************************************************************************
@par 修订记录
- jcai, 2024-09-10 22:16:18
  - 首次编写

********************************************************************************
*/

/* 头文件导入区 ------------------------------------------------------------- */

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "unit_test.h"


/** @defgroup TEST_UT_VERIFY_STRING_EQ TEST_UT_VERIFY_STRING_EQ
@brief test_ut_verify_string_eq modules
@{
*/



/* 宏定义区 ----------------------------------------------------------------- */

#define __FUT__     ut_verify_string_eq


#define FUT_SETUP_EN
#define FUT_CLEANUP_EN



/* 数据类型声明区 ----------------------------------------------------------- */


#ifdef FUT_SETUP_EN
static STATUS futSetup(void);
#define FUT_SETUP_FUNC  futSetup
#else
#define FUT_SETUP_FUNC  NULL
#endif

#ifdef FUT_CLEANUP_EN
static void futCleanup(void);
#define FUT_CLEANUP_FUNC    futCleanup
#else
#define FUT_CLEANUP_FUNC    NULL
#endif

UT_FUT_ENTRY(1);
UT_FUT_ENTRY(2);
UT_FUT_ENTRY(3);
UT_FUT_ENTRY(4);
UT_FUT_ENTRY(5);
UT_FUT_ENTRY(6);
UT_FUT_ENTRY(7);
UT_FUT_ENTRY(8);
UT_FUT_ENTRY(9);






/* 变量定义区 --------------------------------------------------------------- */


static ut_case_t futCaseTbl[] =
{
    // 注册要测试的用例
    // tcId: 测试用例的id
    // fut_entry: 测试用例的入口函数
    // checkCount: 测试用例中有多少个检查项
    // UT_TEST_CASE_REG(tcId, fut_entry, checkCount),
    UT_TEST_CASE_REG(TC_1, UT_FUT_NAME(1), 1),
    UT_TEST_CASE_REG(TC_2, UT_FUT_NAME(2), 1),
    UT_TEST_CASE_REG(TC_3, UT_FUT_NAME(3), 1),
    UT_TEST_CASE_REG(TC_4, UT_FUT_NAME(4), 1),
    UT_TEST_CASE_REG(TC_5, UT_FUT_NAME(5), 1),
    UT_TEST_CASE_REG(TC_6, UT_FUT_NAME(6), 1),
    UT_TEST_CASE_REG(TC_7, UT_FUT_NAME(7), 1),
    UT_TEST_CASE_REG(TC_8, UT_FUT_NAME(8), 1),
    UT_TEST_CASE_REG(TC_9, UT_FUT_NAME(9), 1),
};


// futname: 要测试的函数的名字
//UT_DEFINE_FUT_VARNAME(futname) =
UT_DEFINE_FUT_VARNAME(ut_verify_string_eq) =
{
    UT_FUNC_STR(__FUT__),
    FUT_SETUP_FUNC,
    FUT_CLEANUP_FUNC,
    {0},
    {0},
    futCaseTbl,
    sizeof(futCaseTbl) / sizeof(futCaseTbl[0]),
    0
};



static ut_case_t * pbakbuf;






/* 函数定义区 --------------------------------------------------------------- */


#ifdef FUT_SETUP_EN
static STATUS futSetup(void)
{
    pbakbuf = malloc(sizeof(futCaseTbl));
    if (pbakbuf == NULL)    return ERROR;
    return OK;
}
#endif

#ifdef FUT_CLEANUP_EN
static void futCleanup(void)
{
    free(pbakbuf);
}
#endif

static void backup(void)
{
    memcpy(pbakbuf, futCaseTbl, sizeof(futCaseTbl));
}

static void restore(void)
{
    memcpy(futCaseTbl, pbakbuf, sizeof(futCaseTbl));
}









/**
********************************************************************************
@brief    校验返回值为 true
@details
在FUT的参数 [exp] 与 [act] 指向的字符串内容相同的时候，校验返回值为 true
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(1)
{
    bool exp = true;

    backup();
    bool act = ut_verify_string_eq("true", "true",
                                   "\"true\" == \"true\"");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回true");
}

/**
********************************************************************************
@brief    校验返回值为 false
@details
验证参数的字符串长度不一样。

在FUT的参数为如下值:
- [exp]: "abc"
- [act]: "abcd"
校验返回值为 false
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(2)
{
    bool exp = false;

    backup();
    bool act = ut_verify_string_eq("abcd", "abc",
                                   "\"abcd\" != \"abc\"");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回false");
}

/**
********************************************************************************
@brief    校验返回值为 false
@details
验证参数中是大小写字母不同。

在FUT的参数为如下值:
- [exp]: "abc"
- [act]: "aBc"
校验返回值为 false
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(3)
{
    bool exp = false;

    backup();
    bool act = ut_verify_string_eq("aBc", "abc",
                                   "\"aBc\" != \"abc\"");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回false");
}

/**
********************************************************************************
@brief    校验返回值为 true
@details
验证两个参数都为空字符串。

在FUT的参数 [exp] 与 [act] 为 "" 的时候，校验返回值为 true
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(4)
{
    bool exp = true;

    backup();
    bool act = ut_verify_string_eq("", "",
                                   "\"\" == \"\"");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回true");
}

/**
********************************************************************************
@brief    校验返回值为 false
@details
验证参数中存在大小写字母，数字与符号，并且是数字不同

在FUT的参数为如下值:
- [act]: "abcDef*(9slfj"
- [exp]: "abcDef*(0sljf"
校验返回值为 false
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(5)
{
    bool exp = false;

    backup();
    bool act = ut_verify_string_eq("abcDef*(9slfj", "abcDef*(0sljf",
                                   "act != exp");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回false");
}

/**
********************************************************************************
@brief    校验返回值为 false
@details
校验参数存在相同的大写/小写字母，并且是大小写字母不一样。

在FUT的参数为如下值:
- [act]: "abcDEf"
- [exp]: "abcDef"
校验返回值为 false
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(6)
{
    bool exp = false;

    backup();
    bool act = ut_verify_string_eq("abcDEf", "abcDef",
                                   "act != exp");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回false");
}

/**
********************************************************************************
@brief    校验返回值为 true
@details
校验字符串的内容支持多个类型的字符。

在FUT的参数为如下值: (验证所有可能的可打印ASCII字符)
- [act]: "ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-="
- [exp]: "ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-="
校验返回值为 true
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(7)
{
    bool exp = true;

    char expStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-=";
    char actStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-=";

    backup();
    bool act = ut_verify_string_eq(actStr, expStr,
                                   "act == exp");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回true");
}

/**
********************************************************************************
@brief    校验返回值为 false
@details
校验字符串的第一个字符就不匹配。

在FUT的参数为如下值:
- [act]: ".ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-="
- [exp]: "-ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-="
校验返回值为 false
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(8)
{
    bool exp = false;

    char expStr[] = "-ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-=";
    char actStr[] = ".ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-=";

    backup();
    bool act = ut_verify_string_eq(actStr, expStr,
                                   "act != exp");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回false");
}

/**
********************************************************************************
@brief    校验返回值为 false
@details
校验字符串的最后一个字符就不匹配。

在FUT的参数为如下值:
- [act]: "ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-=,"
- [exp]: "ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-=/"
校验返回值为 false
@param    none
@retval  none
@note    none
*/
UT_FUT_ENTRY(9)
{
    bool exp = false;

    char expStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-=/";
    char actStr[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\t0123456789\r\nabcdefghijklmnopqrstuvwxyz <>?,./:\";'[]{}|\\~!@#$%^&*()_+-=,";

    backup();
    bool act = ut_verify_string_eq(actStr, expStr,
                                   "act != exp");
    restore();

    ut_verify_bool_eq(act, exp, "校验FUT返回false");
}



/** defgroup TEST_UT_VERIFY_STRING_EQ
@}
*/


/*********************************** END OF FILE ******************************/
